

<!DOCTYPE html>
<html lang="zh-CN" data-default-color-scheme=auto>



<head>
  <meta charset="UTF-8">
  <link rel="apple-touch-icon" sizes="76x76" href="/img/favicon.png">
  <link rel="icon" href="/img/favicon.png">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0, shrink-to-fit=no">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  
  <meta name="theme-color" content="#2f4154">
  <meta name="author" content="Cheney">
  <meta name="keywords" content="Coding">
  
    <meta name="description" content="数据库系统概述，数据模型的组成要素，数据库系统的结构 ... ...">
<meta property="og:type" content="article">
<meta property="og:title" content="数据库笔记--基础部分">
<meta property="og:url" content="https://cheney822.gitee.io/2021/06/04/%E6%95%B0%E6%8D%AE%E5%BA%93__%E6%95%B0%E6%8D%AE%E5%BA%93%E7%AC%94%E8%AE%B0--%E5%9F%BA%E7%A1%80%E9%83%A8%E5%88%86/index.html">
<meta property="og:site_name" content="Cheney blog">
<meta property="og:description" content="数据库系统概述，数据模型的组成要素，数据库系统的结构 ... ...">
<meta property="og:locale" content="zh_CN">
<meta property="article:published_time" content="2021-06-04T00:22:00.000Z">
<meta property="article:modified_time" content="2022-04-05T13:20:56.379Z">
<meta property="article:author" content="Cheney">
<meta property="article:tag" content="笔记">
<meta property="article:tag" content="数据库">
<meta name="twitter:card" content="summary_large_image">
  
  
  <title>数据库笔记--基础部分 - Cheney blog</title>

  <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4/dist/css/bootstrap.min.css" />


  <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/github-markdown-css@4/github-markdown.min.css" />
  <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/hint.css@2/hint.min.css" />

  
    
    
      
      <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/highlight.js@10/styles/github-gist.min.css" />
    
  

  
    <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3/dist/jquery.fancybox.min.css" />
  


<!-- 主题依赖的图标库，不要自行修改 -->

<link rel="stylesheet" href="//at.alicdn.com/t/font_1749284_ba1fz6golrf.css">



<link rel="stylesheet" href="//at.alicdn.com/t/font_1736178_lbnruvf0jn.css">


<link  rel="stylesheet" href="/css/main.css" />

<!-- 自定义样式保持在最底部 -->


  <script id="fluid-configs">
    var Fluid = window.Fluid || {};
    var CONFIG = {"hostname":"cheney822.gitee.io","root":"/","version":"1.8.14","typing":{"enable":true,"typeSpeed":70,"cursorChar":"_","loop":false},"anchorjs":{"enable":true,"element":"h1,h2,h3,h4,h5,h6","placement":"right","visible":"hover","icon":""},"progressbar":{"enable":true,"height_px":3,"color":"#29d","options":{"showSpinner":false,"trickleSpeed":100}},"copy_btn":true,"image_zoom":{"enable":true,"img_url_replace":["",""]},"toc":{"enable":true,"headingSelector":"h1,h2,h3,h4,h5,h6","collapseDepth":1},"lazyload":{"enable":true,"loading_img":"/img/loading.gif","onlypost":false,"offset_factor":2},"web_analytics":{"enable":false,"baidu":null,"google":null,"gtag":null,"tencent":{"sid":null,"cid":null},"woyaola":null,"cnzz":null,"leancloud":{"app_id":null,"app_key":null,"server_url":null,"path":"window.location.pathname","ignore_local":false}},"search_path":"/local-search.xml"};
  </script>
  <script  src="/js/utils.js" ></script>
  <script  src="/js/color-schema.js" ></script>
<meta name="generator" content="Hexo 5.4.1"></head>


<body>
  <header style="height: 70vh;">
    <nav id="navbar" class="navbar fixed-top  navbar-expand-lg navbar-dark scrolling-navbar">
  <div class="container">
    <a class="navbar-brand" href="/">
      <strong>Cheney Blog</strong>
    </a>

    <button id="navbar-toggler-btn" class="navbar-toggler" type="button" data-toggle="collapse"
            data-target="#navbarSupportedContent"
            aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
      <div class="animated-icon"><span></span><span></span><span></span></div>
    </button>

    <!-- Collapsible content -->
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
      <ul class="navbar-nav ml-auto text-center">
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/">
                <i class="iconfont icon-home-fill"></i>
                首页
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/archives/">
                <i class="iconfont icon-archive-fill"></i>
                归档
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/categories/">
                <i class="iconfont icon-category-fill"></i>
                分类
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/tags/">
                <i class="iconfont icon-tags-fill"></i>
                标签
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/about/">
                <i class="iconfont icon-user-fill"></i>
                关于
              </a>
            </li>
          
        
        
          <li class="nav-item" id="search-btn">
            <a class="nav-link" target="_self" href="javascript:;" data-toggle="modal" data-target="#modalSearch" aria-label="Search">
              &nbsp;<i class="iconfont icon-search"></i>&nbsp;
            </a>
          </li>
        
        
          <li class="nav-item" id="color-toggle-btn">
            <a class="nav-link" target="_self" href="javascript:;" aria-label="Color Toggle">&nbsp;<i
                class="iconfont icon-dark" id="color-toggle-icon"></i>&nbsp;</a>
          </li>
        
      </ul>
    </div>
  </div>
</nav>

    <div class="banner" id="banner" parallax=true
         style="background: url('https://imgbed.cheney.cc/Blog_config/default.png') no-repeat center center;
           background-size: cover;">
      <div class="full-bg-img">
        <div class="mask flex-center" style="background-color: rgba(0, 0, 0, 0.3)">
          <div class="page-header text-center fade-in-up">
            <span class="h2" id="subtitle" title="数据库笔记--基础部分">
              
            </span>

            
              <div class="mt-3">
  
  
    <span class="post-meta">
      <i class="iconfont icon-date-fill" aria-hidden="true"></i>
      <time datetime="2021-06-04 08:22" pubdate>
        2021年6月4日 早上
      </time>
    </span>
  
</div>

<div class="mt-1">
  
    <span class="post-meta mr-2">
      <i class="iconfont icon-chart"></i>
      8.4k 字
    </span>
  

  
    <span class="post-meta mr-2">
      <i class="iconfont icon-clock-fill"></i>
      
      
      43 分钟
    </span>
  

  
  
</div>

            
          </div>

          
        </div>
      </div>
    </div>
  </header>

  <main>
    
      

<div class="container-fluid nopadding-x">
  <div class="row nomargin-x">
    <div class="d-none d-lg-block col-lg-2"></div>
    <div class="col-lg-8 nopadding-x-md">
      <div class="container nopadding-x-md" id="board-ctn">
        <div class="py-5" id="board">
          <article class="post-content mx-auto">
            <!-- SEO header -->
            <h1 style="display: none">数据库笔记--基础部分</h1>
            
            <div class="markdown-body">
              <h1 id="1-绪论"><a href="#1-绪论" class="headerlink" title="1.绪论"></a>1.绪论</h1><h2 id="1-1-数据库系统概述"><a href="#1-1-数据库系统概述" class="headerlink" title="1.1 数据库系统概述"></a>1.1 数据库系统概述</h2><h3 id="几个概念"><a href="#几个概念" class="headerlink" title="几个概念"></a>几个概念</h3><ul>
<li>数据(Data):数据是数据库中存储的基本对象。</li>
<li>数据库(DB)：数据库是长期存储在计算机内、有组织、可共享的大量数据的集合。</li>
<li>数据库管理系统(DBMS):是位于用户和操作系统之间的数据管理软件，主要功能数据定义、数据组织存储管理、数据操纵、事务和运行管理、数据库建立和维护等。</li>
<li>数据库系统(DBS)：由数据库、数据库管理系统、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统。</li>
</ul>
<blockquote>
<p>注意DBS包括DB和DBMS</p>
</blockquote>
<h3 id="发展的几个阶段："><a href="#发展的几个阶段：" class="headerlink" title="发展的几个阶段："></a>发展的几个阶段：</h3><ul>
<li>人工管理-&gt;文件系统-&gt;数据库系统</li>
<li>数据库优点：<br>1.数据结构化(与文件系统的本质区别) 2.数据共享性高、冗余度底、易扩充 3.数据独立性高 4.由数据库管理系统统一管理和控制</li>
</ul>
<h2 id="1-2数据模型"><a href="#1-2数据模型" class="headerlink" title="1.2数据模型"></a>1.2数据模型</h2><h3 id="数据模型分类"><a href="#数据模型分类" class="headerlink" title="数据模型分类"></a>数据模型分类</h3><ul>
<li>第一类：概念模型</li>
</ul>
<blockquote>
<p>也称为信息模型，按用户的观点对信息和数据建模，主要用于数据库设计。</p>
</blockquote>
<ul>
<li>第二类：逻辑模型和物理模型</li>
</ul>
<blockquote>
<p>逻辑模型包括：层次、网状、关系 和其它模型（面向对象、键值对、基于文档等）。是按照计算机系统的观点对数据建模，主要用于数据库管理系统的实现。</p>
</blockquote>
<blockquote>
<p>物理模型：是数据库系统的核心和基础。是针对上述逻辑模型所说的内容，在具体的物理介质上实现出来。</p>
</blockquote>
<h3 id="概念模型"><a href="#概念模型" class="headerlink" title="概念模型"></a>概念模型</h3><ul>
<li>概念：实体、属性、码、实体型、实体集、联系 ？</li>
<li>表示方法：实体–联系方法。用E-R图来描述现实世界的概念模型。</li>
</ul>
<h3 id="数据模型的组成要素"><a href="#数据模型的组成要素" class="headerlink" title="数据模型的组成要素"></a>数据模型的组成要素</h3><ul>
<li>数据结构(静态)：描述数据库的组成对象以及其中的联系。</li>
<li>数据操作(动态)：是数据库中各种对象(型)的实例(值)允许执行的操作的集合。主要有查询和更新两大类操作。</li>
<li>完整性约束：实体完整性、参照完整性、自定义完整性。</li>
</ul>
<h3 id="常用数据模型"><a href="#常用数据模型" class="headerlink" title="常用数据模型"></a>常用数据模型</h3><table>
<thead>
<tr>
<th>模型</th>
<th>特点</th>
<th>优点</th>
<th>缺点</th>
</tr>
</thead>
<tbody><tr>
<td>层次</td>
<td>树结构</td>
<td>结构简单清晰,查询效率高，良好的完整性支持</td>
<td>适用范围小，对双亲的表示不友好</td>
</tr>
<tr>
<td>网状</td>
<td>图结构</td>
<td>描述更直接，存取效率高</td>
<td>结构复杂，DDL DML复杂，访问程序必须了解路径。</td>
</tr>
<tr>
<td>关系</td>
<td>关系规范化   (范式)</td>
<td>严格数学基础，格式单一，存取路径透明</td>
<td>查询效率低</td>
</tr>
</tbody></table>
<h2 id="1-3数据库系统的结构"><a href="#1-3数据库系统的结构" class="headerlink" title="1.3数据库系统的结构"></a>1.3数据库系统的结构</h2><h3 id="型和值"><a href="#型和值" class="headerlink" title="型和值"></a>型和值</h3><ul>
<li>型是对某一类数据的结构和属性的说明<br>值是型的一个具体赋值。</li>
<li>模式是数据库中全体数据的逻辑结构和特征的描述(型)，实例是模式的一个具体值(值)。一个模式可以对应多个实例。</li>
<li>模式相对稳定，实例相对变动。</li>
</ul>
<h3 id="三级模式"><a href="#三级模式" class="headerlink" title="三级模式"></a>三级模式</h3><ul>
<li>模式：也称为逻辑模式，是数据库全体数据的逻辑结构和特征的描述，是所有用户的公共数据视图。</li>
<li>外模式：也称用户模式，是数据库用户能够看到和使用的局部数据的逻辑结构和特征的描述，是数据库用户的数据视图。(是模式的子集，可以有多个，是保护数据库安全的措施)</li>
<li>内模式：也称存储模式，一个数据库对应一个内模式，是数据物理结构和存储方式的描述，是数据在数据库内部的组织方式。</li>
</ul>
<h3 id="两级映像与数据独立性"><a href="#两级映像与数据独立性" class="headerlink" title="两级映像与数据独立性"></a>两级映像与数据独立性</h3><blockquote>
<p>数据库系统的三级模式是数据的三个抽象级别，为了实现这三个抽象层次的联系和转换，数据库管理系统在这三级模式之间提供了两层映像即外模式/模式 和 模式/内模式映像，这两层映像保证了数据库系统中的数据具有较高的逻辑独立性和数据独立性。</p>
</blockquote>
<ul>
<li>外模式/模式：当模式改变时(例如增加新的关系、属性)，对外模式/模式映像进行相应的修改可以使外模式保持不变。应用程序是基于外模式编写的，从而应用程序不必修改，保证了数据与程序的逻辑独立性。</li>
<li>模式/内模式映像:唯一。当数据库的存储结构改变时，对模式/内模式映像进行相应的修改可以使模式保持不变，从而使应用程序也不必改变。保证了数据与程序的物理独立性。</li>
</ul>
<h2 id="1-4数据库系统的组成"><a href="#1-4数据库系统的组成" class="headerlink" title="1.4数据库系统的组成"></a>1.4数据库系统的组成</h2><ul>
<li>硬件：大内存、大磁盘、高通道能力</li>
<li>软件：DBMS、OS、高级语言及其编译系统等</li>
<li>人员：用户、应用程序员、DBM等</li>
</ul>
<h1 id="2-关系数据库"><a href="#2-关系数据库" class="headerlink" title="2.关系数据库"></a>2.关系数据库</h1><h2 id="关系数据结构及其形式化定义"><a href="#关系数据结构及其形式化定义" class="headerlink" title="关系数据结构及其形式化定义"></a>关系数据结构及其形式化定义</h2><h3 id="一些概念"><a href="#一些概念" class="headerlink" title="一些概念"></a>一些概念</h3><ul>
<li>域：一组有相同数据类型的值的集合，大小称为基数</li>
<li>关系：笛卡儿积的有限子集，是二维表(元组的集合)</li>
<li>属性：为了区分关系(二维表)的列，给每列取的名字称为属性。</li>
<li>码：关系中的某一个能唯一标识一个元组的属性组。</li>
<li>候选码：最小码 即真子集中不含码的码。</li>
<li>主码：候选码中被选出的一个</li>
<li>注意：主码  属于  候选码 属于  码</li>
<li>主属性：候选码的诸属性</li>
<li>非主属性：不包含在任何候选码中的属性。(主属性以外的属性)</li>
</ul>
<h3 id="关系分类："><a href="#关系分类：" class="headerlink" title="关系分类："></a>关系分类：</h3><ul>
<li>基本关系(也称基本表)：实际存在的表，是实际存储数据的逻辑表示</li>
<li>查询表：查询结果对应的表，是一种暂时的中间变量</li>
<li>视图表：由基本表或者其它视图导出的虚表。</li>
</ul>
<h3 id="关系的性质"><a href="#关系的性质" class="headerlink" title="关系的性质"></a>关系的性质</h3><ul>
<li>1.列是同质的 2.不同属性(列)可来自同一个域 3.列的顺序无所谓 4.候选码不重复 5.行的顺序无所谓 6.分量必须取原子值</li>
</ul>
<h3 id="关系模式"><a href="#关系模式" class="headerlink" title="关系模式"></a>关系模式</h3><blockquote>
<p>关系数据库中，关系模式是型，关系是值。关系模式是对关系的描述。</p>
</blockquote>
<ul>
<li>R(U,D,DOM,F)</li>
<li>关系名(属性名集合,属性域,映像集,依赖关系集)</li>
</ul>
<h2 id="关系操作"><a href="#关系操作" class="headerlink" title="关系操作"></a>关系操作</h2><blockquote>
<p>特点：高度非过程化的集合操作方式，即一次一集合的方式。</p>
</blockquote>
<h3 id="操作分类："><a href="#操作分类：" class="headerlink" title="操作分类："></a>操作分类：</h3><ul>
<li>查询：选择、连接、投影、除、并、差、交</li>
<li>更新：插入、删除、修改。</li>
</ul>
<h3 id="关系数据语言分类"><a href="#关系数据语言分类" class="headerlink" title="关系数据语言分类"></a>关系数据语言分类</h3><ul>
<li>关系代数：如ISBL</li>
<li>关系演算：元组关系(如ALPHA)、域关系(如QBE)</li>
<li>双重特点：如SQL</li>
</ul>
<h2 id="关系的完整性"><a href="#关系的完整性" class="headerlink" title="关系的完整性"></a>关系的完整性</h2><ul>
<li>实体完整性：主码非空且唯一</li>
<li>参照完整性：外码为参照的主码或空</li>
<li>用户自定义完整性：用以满足语义要求</li>
</ul>
<h2 id="关系代数"><a href="#关系代数" class="headerlink" title="关系代数"></a>关系代数</h2><blockquote>
<p>关系代数是以集合运算为基础的运算</p>
</blockquote>
<p>  这里全部用SQL语句做类比引出关系代数的表达</p>
<h3 id="集合运算"><a href="#集合运算" class="headerlink" title="集合运算"></a>集合运算</h3><ul>
<li>交：(关系r)∩(关系s)，相当于SQL语句中INTERSECT关键字</li>
<li>并：格式：（关系r）∪（关系s），相当于SQL中UNION关键字</li>
<li>差：格式：(关系r)-(关系s)，相当于SQL语句中的EXCEPT关键字</li>
<li>积:格式：(关系r)×(关系)，等价于SQL语句中两个表进行笛卡尔积（全匹配）即SQL中进行多表连接时不指定连接条件的情况。</li>
</ul>
<h3 id="专门的关系运算"><a href="#专门的关系运算" class="headerlink" title="专门的关系运算"></a>专门的关系运算</h3><h4 id="概念"><a href="#概念" class="headerlink" title="概念"></a>概念</h4><ul>
<li>象集：象集的本质是一次选择运算和一次投影运算。</li>
<li>例如关系模式R(X,Y)，X和Y表示互为补集的两个属性集，对于遵循模式R的某个关系A，当t[X]=x时，x在A中的象集（Images Set）为：<br>Zx={ t[Z] | t ∈ A，t[X]=x }<br>它表示：A中X分量等于x的元组集合在属性集Z上的投影。</li>
</ul>
<blockquote>
<p>例如A：<br>X Y Z<br>a1 b1 c2<br>a2 b3 c7<br>a3 b4 c6<br>a1 b2 c3<br>a4 b6 c6<br>a2 b2 c3<br>a1 b2 c1<br>则a1在A中的象集为{(b1,c2),(b2,c3),(b2,c1)}</p>
</blockquote>
<h4 id="选择："><a href="#选择：" class="headerlink" title="选择："></a>选择：</h4><ul>
<li>相当于SQL语句中的WHERE子句</li>
<li>格式：σ选择谓词(关系)</li>
</ul>
<blockquote>
<p>σSAL&gt;1000(EMP)<br>等价于:SELECT * FROM EMP WHERE SAL &gt; 1000</p>
</blockquote>
<h4 id="投影："><a href="#投影：" class="headerlink" title="投影："></a>投影：</h4><ul>
<li>相当于SQL语句中的SELECT子句</li>
<li>格式：∏字段序列(关系)</li>
</ul>
<blockquote>
<p>∏ENAME,SAL(EMP)<br>等价于：SELECT ENAME, SAL FROM EMP</p>
</blockquote>
<blockquote>
<p>将上面两个组合起来：<br>SELECT ENAME, SAL FROM EMP WHERE SAL &gt; 1000<br>∏ENAME,SAL(σSAL&gt;1000(EMP))      </p>
</blockquote>
<h4 id="连接："><a href="#连接：" class="headerlink" title="连接："></a>连接：</h4><h5 id="自然连接"><a href="#自然连接" class="headerlink" title="自然连接"></a>自然连接</h5><ul>
<li>相当于SQL语句中的NATURAL JOIN</li>
<li>格式：(关系)⋈(关系)</li>
<li>形式化定义：r⋈s = ∏R∪S(σr.A1=s.A1 ∧ r.A2=s.A2 ∧ … ∧ r.An=s.An(r×s)) ，其中 R∩S={A1, A2, …, An}</li>
</ul>
<blockquote>
<p>∏name, course_id(instructor ⋈ teaches)<br>等价于：SELECT name, course_id FROM intructor natural join teaches<br>或者 </p>
</blockquote>
<h5 id="theta连接"><a href="#theta连接" class="headerlink" title="theta连接"></a>theta连接</h5><ul>
<li>带限定条件的笛卡尔积</li>
<li>格式：(关系)⋈Θ(关系)</li>
<li>形式化定义：r ⋈Θ s = σΘ(r × s)</li>
</ul>
<blockquote>
<p>∏name, course_id(instructor ⋈instructor.ID = teaches.ID ∧ instructor.salary &gt; 5000 teaches)<br>– 使用 join…on 的时候 on 后面写连接条件，然后将其它条件放在where里<br>等价于：SELECT name, course_id<br>FROM instructor join teaches on instructor.ID = teaches.ID<br>WHERE instructor.salary &gt; 5000     </p>
</blockquote>
<h4 id="除："><a href="#除：" class="headerlink" title="除："></a>除：</h4><ul>
<li>格式：(关系)÷(关系)</li>
<li>形式化定义：R÷S = ∏R∪S( ( ∏R-S(r) × S ) - ∏R-S, S(r) )</li>
<li>定义：给定关系R(X,Y)和S(Y,Z),其中X,Y,Z为属性组。R中Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算可以得到一个新的关系P(X),P是R中满足下列条件的元组在X 属性列上的投影: 元组在X上的分量值x的像集Y(x)包含S在Y上的投影的集合。</li>
</ul>
<blockquote>
<p>求解步骤：<br>第一步：找出关系R和关系S中相同的属性，即Y属性。在关系S中对Y做投影（即将Y列取出）；<br>第二步：被除关系R中与S中不相同的属性列是X，关系R在属性X上做取消重复值的投影；<br>第三步：求关系R中X属性对应的像集Y；<br>第四步：判断包含关系，R÷S其实就是判断关系R中X各个值的像集Y是否包含关系S中属性Y的所有值。</p>
</blockquote>
<h3 id="运算间的关系"><a href="#运算间的关系" class="headerlink" title="运算间的关系"></a>运算间的关系</h3><blockquote>
<p>并、差、投影、选择、笛卡尔积是五种基本运算，其它三种交、连接、除可以用这五种来表达</p>
</blockquote>
<ul>
<li>交：R交S = R-(R-S)</li>
<li>连接：R⋈nS=σn(RxS) (n为条件)</li>
<li>除：R÷S = ∏R∪S( ( ∏R-S(r) × S ) - ∏R-S, S(r) )</li>
</ul>
<h1 id="3-SQL-4-安全-5-完整"><a href="#3-SQL-4-安全-5-完整" class="headerlink" title="3.SQL 4.安全 5.完整"></a>3.SQL 4.安全 5.完整</h1><p>  (见其它部分)</p>
<h1 id="6-关系数据理论"><a href="#6-关系数据理论" class="headerlink" title="6.关系数据理论"></a>6.关系数据理论</h1><h2 id="问题的提出"><a href="#问题的提出" class="headerlink" title="问题的提出"></a>问题的提出</h2><blockquote>
<p>规范化理论解决的问题：如何构造合适的数据逻辑结构。<br>是为了提高关系数据库的查询效率而提出的</p>
</blockquote>
<h3 id="不好的关系模式存在的问题："><a href="#不好的关系模式存在的问题：" class="headerlink" title="不好的关系模式存在的问题："></a>不好的关系模式存在的问题：</h3><ul>
<li>数据冗余</li>
<li>更新异常</li>
<li>插入异常</li>
<li>删除异常</li>
</ul>
<h3 id="数据依赖分类："><a href="#数据依赖分类：" class="headerlink" title="数据依赖分类："></a>数据依赖分类：</h3><ul>
<li>函数依赖：</li>
<li>多值依赖：</li>
</ul>
<h2 id="规范化"><a href="#规范化" class="headerlink" title="规范化"></a>规范化</h2><h3 id="函数依赖："><a href="#函数依赖：" class="headerlink" title="函数依赖："></a>函数依赖：</h3><ul>
<li>定义：R(U)是属性集U上的关系模式，X、Y是U的子集。若对于R(U)的任意一个可能的关系r，r中不可能存在两个元组在x上的属性值相等，而在Y上的属性值不等，则称X函数确定Y或Y函数依赖于X，记做X-&gt;Y。</li>
</ul>
<blockquote>
<ul>
<li>X-&gt;Y但Y不属于X，则称X-&gt;Y是非平凡的函数依赖。</li>
<li>X-&gt;Y但Y属于X，则称X-&gt;Y是平凡的函数依赖。</li>
</ul>
</blockquote>
<ul>
<li>定义：在R(U)中，如果X-&gt;Y，并且对于x的任何一个真子集x’,都有X’ !-&gt;Y 则称Y对X完全函数依赖。</li>
</ul>
<blockquote>
<ul>
<li>若X-&gt;Y，但Y不完全函数依赖于X则称Y对X部分函数依赖。</li>
</ul>
</blockquote>
<ul>
<li>定义：在R(U)中,如果X-&gt;Y(Y不包含于X),Y!-&gt;X,Y-&gt;Z,(Z不包含于Y)则称Z对X传递函数依赖。</li>
</ul>
<h3 id="码"><a href="#码" class="headerlink" title="码"></a>码</h3><p>  设K是R(U,F)中的属性或者属性集合，若U完全函数依赖于K，则称K为R的候选码。若U部分函数依赖于K则K称为超码，候选码是最小的超码。</p>
<h3 id="范式"><a href="#范式" class="headerlink" title="范式"></a>范式</h3><ul>
<li>通常按照属性间依赖情况来区分关系规范程度即属于的范式。      </li>
<li>一个第一级的范式可以通过模式分解转化成若干个高一级的范式的集合，这个过程就叫规范化。（这种分解不是唯一的）</li>
</ul>
<h4 id="定义："><a href="#定义：" class="headerlink" title="定义："></a>定义：</h4><table>
<thead>
<tr>
<th>范式</th>
<th>定义</th>
</tr>
</thead>
<tbody><tr>
<td>1NF</td>
<td>一个分量必须是不可再分的数据项。</td>
</tr>
<tr>
<td>2NF</td>
<td>R属于第一范式，且每一个非主属性完全函数依赖于任何一个候选码，则R属于第二范式</td>
</tr>
<tr>
<td>3NF</td>
<td>R(U,F)属于第一范式，若R中不存在这样的码，属性组Y及非主属性Z使得X-&gt;Y,Y-&gt;Z成立，Y!-&gt;X ,则称R(U,F)属于第三范式</td>
</tr>
<tr>
<td>BCNF</td>
<td>R(U,F)属于第一范式，若x-&gt;Y 且Y不属于X时X必包含码，则R(U,F)属于BCNF(在函数依赖范畴已达最高级别)</td>
</tr>
</tbody></table>
<h4 id="转化："><a href="#转化：" class="headerlink" title="转化："></a>转化：</h4><ul>
<li>第一范式通过消除非主属性对码的部分函数依赖转化为第二范式</li>
<li>第二范式通过消除非主属性对码的传递函数依赖转化为第三范式</li>
<li>第三范式通过消除主属性对码的部分和传递函数依赖转化为BC范式</li>
</ul>
<h4 id="判别方法："><a href="#判别方法：" class="headerlink" title="判别方法："></a>判别方法：</h4><ul>
<li>所有属性都是不可再分的基本数据项，则属于第一范式</li>
<li>若属于1NF且</li>
<li>若属于1NF且</li>
<li>若属于1NF且</li>
</ul>
<h2 id="数据依赖公理系统"><a href="#数据依赖公理系统" class="headerlink" title="数据依赖公理系统"></a>数据依赖公理系统</h2><h3 id="Armstrong公理系统"><a href="#Armstrong公理系统" class="headerlink" title="Armstrong公理系统"></a>Armstrong公理系统</h3><p>  逻辑蕴含</p>
<ul>
<li>对于满足一组函数依赖F的关系模式R(U,F)，其任何一个关系r若函数依赖x-&gt;Y都成立(即r中任意两元组t、s，若t[x]=s[x],则t[y]=s[y]),则称F逻辑蕴含x-&gt;Y。</li>
</ul>
<p>  闭包</p>
<ul>
<li>关系模式R(U,F)中为F所逻辑蕴含的函数依赖的全体叫做F的闭包，记为F+</li>
</ul>
<p>  最小依赖集</p>
<ul>
<li>如果函数依赖集F满足以下条件，则称F为一个极小函数依赖集，亦称为最小依赖集或最小覆盖<br>1.F中任一函数右部仅有一个属性<br>2.F中不存在x-&gt;A 使得F与F-{X-&gt;A}等价<br>3.F中不存在x-&gt;A，X有真子集Z使得F-{X-&gt;A}并{Z-&gt;A}与F等价</li>
<li>每一个函数依赖集均等价于一个极小函数依赖集Fm，此Fm称为F的最小依赖集。</li>
</ul>
<h1 id="7-数据库设计"><a href="#7-数据库设计" class="headerlink" title="7.数据库设计"></a>7.数据库设计</h1><h2 id="概述六个阶段"><a href="#概述六个阶段" class="headerlink" title="概述六个阶段"></a>概述六个阶段</h2><ul>
<li>系统需求分析<br>对现实世界要处理的对象进行详细的调查，通过对原系统的了解，收集支持新系统的基础数据并对其进行处理，在此基础上确定新系统的功能。</li>
</ul>
<ul>
<li><p>概念结构设计<br>将需求分析数据抽象成局部E-R模型，再将局部E-R模型集成为全局E-R模型。<br>概念结构设计四种方法：自顶向下、自底向上、逐步扩展、混合策略</p>
</li>
<li><p>逻辑结构设计<br>将概念模型转换成特定DBMS所支持的数据模型的过程<br>由初始关系模式设计到关系模式规范化再到模式评价</p>
</li>
<li><p>物理结构设计<br>对于给定的逻辑数据模型，选取一个最适合应用环境的物理结构</p>
</li>
<li><p>数据库实施<br>根据逻辑设计和物理设计的结果，在计算机上建立起实际的数据库结构、装入数据、进行测试和试运行的过程。</p>
</li>
<li><p>数据库运行和维护<br>主要有以下三项内容：</p>
</li>
</ul>
<blockquote>
<ol>
<li>维护数据库的安全性和完整性</li>
<li>监测并改善数据库性能</li>
<li>重新组织和构造数据库</li>
</ol>
</blockquote>
<h2 id="每个阶段完成的具体工作："><a href="#每个阶段完成的具体工作：" class="headerlink" title="每个阶段完成的具体工作："></a>每个阶段完成的具体工作：</h2><ul>
<li>需求分析：分析各个用户的需求。</li>
<li>概念阶段：设计E-R图，形成概念模式</li>
<li>逻辑设计：E-R图转换成具体的数据模型形成逻辑模式，然后根据用户需求建立必要的视图形成外模式。</li>
<li>物理设计：建立索引等，形成内模式。</li>
</ul>
<h2 id="概念结构设计"><a href="#概念结构设计" class="headerlink" title="概念结构设计"></a>概念结构设计</h2><h3 id="E-R模型"><a href="#E-R模型" class="headerlink" title="E-R模型"></a>E-R模型</h3><h4 id="联系分类"><a href="#联系分类" class="headerlink" title="联系分类"></a>联系分类</h4><ul>
<li>两个实体型之间：一对一、多对多、一对多</li>
<li>两个以上实体型：一对一、多对多、一对多</li>
<li>单个实体型内部：一对一、多对多、一对多</li>
</ul>
<h4 id="E-R图"><a href="#E-R图" class="headerlink" title="E-R图"></a>E-R图</h4><ul>
<li>表示：实体型用矩形，属性用椭圆，联系用菱形表示。</li>
</ul>
<h4 id="实体属性划分原则："><a href="#实体属性划分原则：" class="headerlink" title="实体属性划分原则："></a>实体属性划分原则：</h4><ul>
<li>属性不可再分</li>
<li>属性不能与其它实体有联系</li>
</ul>
<h4 id="E-R图的集成"><a href="#E-R图的集成" class="headerlink" title="E-R图的集成"></a>E-R图的集成</h4><ul>
<li>合并E-R图，生成初步E-R图：消除各分E-R图之间的属性、命名、结构冲突</li>
<li>消除不必要的冗余，设计基本E-R图</li>
</ul>
<h2 id="逻辑结构设计"><a href="#逻辑结构设计" class="headerlink" title="逻辑结构设计"></a>逻辑结构设计</h2><h3 id="E-R图向关系模型的转换原则"><a href="#E-R图向关系模型的转换原则" class="headerlink" title="E-R图向关系模型的转换原则"></a>E-R图向关系模型的转换原则</h3><ul>
<li>1：1联系可与任一端合并，或者转化为独立关系模式。</li>
<li>1：n联系可转化为关系模式，或者与n端合并</li>
<li>m：n联系转化为关系模式</li>
<li>多个实体间的多元联系可转换为一个关系模式</li>
<li>具有相同码的关系模式可合并</li>
</ul>
<h3 id="数据模型的优化"><a href="#数据模型的优化" class="headerlink" title="数据模型的优化"></a>数据模型的优化</h3><p>  数据库设计结果不唯一，并不是规范化程度(满足的范式)越高越好。</p>
<h3 id="设计用户子模式"><a href="#设计用户子模式" class="headerlink" title="设计用户子模式"></a>设计用户子模式</h3><p>  1.取别名 2.定义视图 3.简化使用</p>
<h1 id="8-数据库编程"><a href="#8-数据库编程" class="headerlink" title="8.数据库编程"></a>8.数据库编程</h1><h2 id="应用系统中使用SQL编程的方式主要有："><a href="#应用系统中使用SQL编程的方式主要有：" class="headerlink" title="应用系统中使用SQL编程的方式主要有："></a>应用系统中使用SQL编程的方式主要有：</h2><ul>
<li>嵌入式SQL、过程化SQL、存储过程和自定义函数：</li>
</ul>
<blockquote>
<p>基本的SQL是高度非过程化的语言。嵌入式SQL将SQL语句嵌入程序设计语言，借助高级语言的控制功能实现过程化。过程化SQL是对SQL的扩展，使其增加了过程化语句功能。过程化SQL程序的基本结构是块。所有的过程化SQL程序都是由块组成的。这些块之间可以相互嵌套，每个块完成一个逻辑操作。过程化SQL块主要有命名块和匿名块。匿名块每次执行时都要进行编译，它不能被存储到数据库中，也不能在其他过程化SQL块中调用。过程和函数是命名块，他们被编译后保存在数据库中，称为持久性存储模块（PSM），可以被反复调用，运行速度较快。函数必须指定返回的类型。</p>
</blockquote>
<ul>
<li>ODBC：用户应用程序-&gt;ODBC编程接口-&gt;ODBC驱动程序管理器-&gt;(多个)数据库驱动程序-&gt;数据源(具体数据库)。</li>
<li>JDBC：与ODBC类似</li>
</ul>
<h1 id="一些练习题"><a href="#一些练习题" class="headerlink" title="**一些练习题"></a>**一些练习题</h1><h2 id="一些概念-1"><a href="#一些概念-1" class="headerlink" title="一些概念"></a>一些概念</h2><ul>
<li>在函数依赖范畴，最高可达第三范式</li>
<li>关系模式中的属性全是主属性，其至少达到第三范式</li>
<li>关系模式整个属性组是码，最高至少满足3NF</li>
<li>数据冗余可能导致浪费存储空间、修改复杂、数据不一致性。</li>
<li>关系代数的连接=选择+笛卡儿积</li>
<li>关系数据模型的基本数据结构是关系</li>
<li>安全性控制方法：用户标识鉴定、存取控制、审计(事后检查)、数据加密</li>
<li>完整性控制可以保证数据及语义正确有效</li>
<li>触发器只能定义在基本表上，不可以定义在视图上。</li>
<li>数据冗余是数据库数据不一致的根本原因</li>
<li>聚合函数count不会忽略空值(SUM、MAX、AVG等会)</li>
<li>SQL中的SELECT相当于关系代数中的投影操作</li>
<li>关系代数是以集合运算为基础的运算，关系演算是以谓词演算为基础的</li>
<li>对关系模式进行规范化的目的是为了减少数据冗余</li>
</ul>
<h2 id="简述三级模式两级映像的内容与优点："><a href="#简述三级模式两级映像的内容与优点：" class="headerlink" title="简述三级模式两级映像的内容与优点："></a>简述三级模式两级映像的内容与优点：</h2><blockquote>
<p>三级模式是指内模式，模式和外模式。数据库系统的三级模式是对数据的三个抽象级别(),它把数据的具体组织管理留给DBMS，使用户能逻辑抽象的处理数据而不必关心数据在计算机中的表示和存储。</p>
</blockquote>
<blockquote>
<p>为了在内部实现这三种抽象层次的转换，设计了内模式/模式映射确定它的物理独立性，模式/外模式映射确定它的逻辑独立性，也就是二级映射。</p>
</blockquote>
<h2 id="简述DBS的数据与程序的独立性"><a href="#简述DBS的数据与程序的独立性" class="headerlink" title="简述DBS的数据与程序的独立性"></a>简述DBS的数据与程序的独立性</h2><ul>
<li>数据与程序的独立性分为逻辑独立性和物理独立性</li>
<li>逻辑独立性：当模式改变时DBMS对各个外模式/模式映像做相应修改可以使外模式保持不变，从而使应用程序不必修改。保证了数据与程序的逻辑独立性。</li>
<li>当数据库的存储结构改变时DBMS对模式/外模式映像做相应修改可以使模式保持不变，从而使应用程序不必修改。保证了程序与数据的物理独立性。</li>
<li>所谓独立性就是一个的变化不会影响另外一个，逻辑/物理与程序的独立性就是逻辑结构/物理结构改变了程序本身不用改变，因为他们的改变都被两层映像给屏蔽了。</li>
</ul>
<h2 id="简述关系数据模型的优缺点"><a href="#简述关系数据模型的优缺点" class="headerlink" title="简述关系数据模型的优缺点"></a>简述关系数据模型的优缺点</h2><p>  优点：</p>
<ul>
<li>建立在严格的数学概念之上</li>
<li>数据结构简单清晰用户易懂易用</li>
<li>存取路径对用户透明从而有更高的数据独立性、安全性</li>
</ul>
<p>  缺点：</p>
<ul>
<li>由于存取路径透明，查询效率不高。</li>
</ul>
<h2 id="简述数据库设计的基本步骤"><a href="#简述数据库设计的基本步骤" class="headerlink" title="简述数据库设计的基本步骤"></a>简述数据库设计的基本步骤</h2><ul>
<li>需求分析：了解与分析用户需求(包括数据与处理)</li>
<li>概念结构设计：通过对用户需求进行综合、归纳与抽象，形成独立于DBMS的概念模型。</li>
<li>逻辑结构设计：将概念结构转化为某个DBMS支持的数据模型并优化</li>
<li>数据库物理设计：为逻辑模型选取最适合应用环境的物理结构.</li>
<li>数据库实施：建立数据库，编写调试应用程序，数据入库，测试运行</li>
<li>运行和维护：运行过程中对其进行评价调整与修改</li>
</ul>
<h2 id="辨析关系、关系模型、关系数据库"><a href="#辨析关系、关系模型、关系数据库" class="headerlink" title="辨析关系、关系模型、关系数据库"></a>辨析关系、关系模型、关系数据库</h2><ul>
<li>关系：笛卡儿积的有限子集，是二维表(元组的集合)，是关系模式在某一时刻的状态或内容。</li>
<li>关系模式：关系的描述称为关系模式，是五元组R( U,D,DOM,F)</li>
</ul>
<blockquote>
<p>关系模式(型)是静态稳定的、关系(值)是动态不断变化的。</p>
</blockquote>
<ul>
<li>关系数据库也分型和值。关系数据库模式是对关系数据库型的描述，包含若干域的定义以及在这些域上定义的若干关系模式。关系数据库的值是这些关系模式在某一时刻对应关系的集合通常就称为关系数据库。</li>
</ul>
<h2 id="简述视图的优点"><a href="#简述视图的优点" class="headerlink" title="简述视图的优点"></a>简述视图的优点</h2><ul>
<li>简化用户的操作</li>
<li>使用户能够以多角度看待同一数据</li>
<li>提供了一定程度的逻辑独立性</li>
<li>对机密数据提高安全保护</li>
</ul>
<h2 id="简述相关子查询的执行顺序"><a href="#简述相关子查询的执行顺序" class="headerlink" title="简述相关子查询的执行顺序"></a>简述相关子查询的执行顺序</h2><ul>
<li>首先选取父查询的第一行，内部子查询利用其相关属性值进行查询</li>
<li>然后根据子查询返回结果判断是否满足查询条件，若满足则放入父查询结果中</li>
<li>重复上述过程，直至处理完父查询表中的每一个元组。</li>
</ul>
<h2 id="判断满足某种函数依赖时的码以及满足的范式方法："><a href="#判断满足某种函数依赖时的码以及满足的范式方法：" class="headerlink" title="判断满足某种函数依赖时的码以及满足的范式方法："></a>判断满足某种函数依赖时的码以及满足的范式方法：</h2><p>  码：能推出所有属性的左侧元素的集合</p>
<p>  范式:</p>
<ul>
<li>属性不可再分则满足1NF</li>
<li>1NF且非主属性没有部分函数依赖(x-&gt;Y,则x的子集!-&gt;Y)则满足2NF</li>
<li>2NF且非主属性没有传递函数依赖(x-&gt;Y-&gt;Z)则满足3NF</li>
<li>3NF且左侧必含有码则满足BCNF</li>
</ul>
<h2 id="求最小依赖集的步骤："><a href="#求最小依赖集的步骤：" class="headerlink" title="求最小依赖集的步骤："></a>求最小依赖集的步骤：</h2><ul>
<li>1、首先，先利用函数依赖的分解性，将函数依赖集中右部不为单个属性的分解为单属性。</li>
</ul>
<blockquote>
<p>函数依赖的分解性 若X→YZ，则X→Y 且 X→Z。</p>
</blockquote>
<ul>
<li>2、对于经过第1步筛选后的函数依赖集F中的每一个函数依赖X→A，进行以下操作：</li>
</ul>
<blockquote>
<ul>
<li>2.1、将X→A从函数依赖中剔除    </li>
<li>2.2、基于剔除后的函数依赖，计算属性X的闭包，看其是否包含了A，若是，则该函数依赖是多余的(这里体现出前面说的等价，因为如果基于化简后的函数依赖依赖，计算X的闭包依然包含A，则说明A可以由其他依赖推出，X→A不是必须的)，可以删除，否则不能删除</li>
</ul>
</blockquote>
<ul>
<li>3、对于经过第2步筛选后的函数依赖集F中每个左部不为单个属性的函数依赖AB→Y，进行以下操作：<br>我们约定，经过第二步筛选后的函数依赖集记为F1，经过第三步处理后的函数依赖集为F2。</li>
</ul>
<blockquote>
<ul>
<li>3.1、去除A，得B→Y，得F2，基于F1和F2计算属性B的闭包，如果二者相等，则说明它们是等价的，A可以去除；如果不相等，则A不能去除。</li>
<li>3.2、去除B，得A→Y，得F2，基于F1和F2计算属性A的闭包，如果二者相等则说明它们是等价的，B可以去除；如果不相等，则B不能去除。</li>
</ul>
</blockquote>
<h2 id="SQL和关系代数的转换"><a href="#SQL和关系代数的转换" class="headerlink" title="SQL和关系代数的转换"></a>SQL和关系代数的转换</h2><ul>
<li>SELECT x FROM a WHERE b;等价于： ∏ x (σ b (a));</li>
<li>SELECT x FROM m,n WHERE b;等价于： ∏ x (m ⋈b n);</li>
</ul>
<h2 id="常用SQL句式"><a href="#常用SQL句式" class="headerlink" title="常用SQL句式"></a>常用SQL句式</h2><ul>
<li>SELECT xx FROM xx WHERE xx</li>
<li>INSERT xx INTO xx VALUES(xx)</li>
<li>UPDATE xx SET xx WHERE xx</li>
<li>DELETE xx FROM xx</li>
<li>CREATE TABLE xx (xx)</li>
<li>CREATE VIEW xx AS xx</li>
<li>DROP TABLE xx</li>
<li>GRANT xx ON xx TO xx</li>
<li>REVOKE xx ON xx FROM xx</li>
</ul>

            </div>
            <hr>
            <div>
              <div class="post-metas mb-3">
                
                  <div class="post-meta mr-3">
                    <i class="iconfont icon-category"></i>
                    
                      <a class="hover-with-bg" href="/categories/%E6%95%B0%E6%8D%AE%E5%BA%93/">数据库</a>
                    
                  </div>
                
                
                  <div class="post-meta">
                    <i class="iconfont icon-tags"></i>
                    
                      <a class="hover-with-bg" href="/tags/%E7%AC%94%E8%AE%B0/">笔记</a>
                    
                      <a class="hover-with-bg" href="/tags/%E6%95%B0%E6%8D%AE%E5%BA%93/">数据库</a>
                    
                  </div>
                
              </div>
              
                <p class="note note-warning">
                  
                    本博客所有文章除特别声明外，均采用 <a target="_blank" href="https://creativecommons.org/licenses/by-sa/4.0/deed.zh" rel="nofollow noopener noopener">CC BY-SA 4.0 协议</a> ，转载请注明出处！
                  
                </p>
              
              
                <div class="post-prevnext">
                  <article class="post-prev col-6">
                    
                    
                      <a href="/2021/06/06/%E6%95%B0%E6%8D%AE%E5%BA%93__%E5%A4%96%E5%8D%96%E6%95%B0%E6%8D%AE%E5%BA%93%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F/">
                        <i class="iconfont icon-arrowleft"></i>
                        <span class="hidden-mobile">外卖数据库管理系统</span>
                        <span class="visible-mobile">上一篇</span>
                      </a>
                    
                  </article>
                  <article class="post-next col-6">
                    
                    
                      <a href="/2021/06/03/%E6%95%B0%E6%8D%AE%E5%BA%93__%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AD%A6%E4%B9%A0%E4%B8%80%E7%AB%99%E5%BC%8F%E5%85%A5%E9%97%A8%E8%B5%84%E6%96%99%EF%BC%88%E7%BA%AF%E5%B9%B2%E8%B4%A7%EF%BC%89/">
                        <span class="hidden-mobile">数据库入门资料</span>
                        <span class="visible-mobile">下一篇</span>
                        <i class="iconfont icon-arrowright"></i>
                      </a>
                    
                  </article>
                </div>
              
            </div>

            
          </article>
        </div>
      </div>
    </div>
    
      <div class="d-none d-lg-block col-lg-2 toc-container" id="toc-ctn">
        <div id="toc">
  <p class="toc-header"><i class="iconfont icon-list"></i>&nbsp;目录</p>
  <div class="toc-body" id="toc-body"></div>
</div>

      </div>
    
  </div>
</div>

<!-- Custom -->


    

    
      <a id="scroll-top-button" aria-label="TOP" href="#" role="button">
        <i class="iconfont icon-arrowup" aria-hidden="true"></i>
      </a>
    

    
      <div class="modal fade" id="modalSearch" tabindex="-1" role="dialog" aria-labelledby="ModalLabel"
     aria-hidden="true">
  <div class="modal-dialog modal-dialog-scrollable modal-lg" role="document">
    <div class="modal-content">
      <div class="modal-header text-center">
        <h4 class="modal-title w-100 font-weight-bold">搜索</h4>
        <button type="button" id="local-search-close" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body mx-3">
        <div class="md-form mb-5">
          <input type="text" id="local-search-input" class="form-control validate">
          <label data-error="x" data-success="v"
                 for="local-search-input">关键词</label>
        </div>
        <div class="list-group" id="local-search-result"></div>
      </div>
    </div>
  </div>
</div>
    

    
  </main>

  <footer class="text-center mt-5 py-3">
  <div class="footer-content">
     <a href="https://hexo.io" target="_blank" rel="nofollow noopener"><span>Hexo</span></a> <i class="iconfont icon-love"></i> <a href="https://cheney822.gitee.io/" target="_blank" rel="nofollow noopener"><span>备用网址</span></a> 
  </div>
  

  
  <!-- 备案信息 -->
  <div class="beian">
    <span>
      <a href="http://beian.miit.gov.cn/" target="_blank" rel="nofollow noopener">
        皖ICP备2022002876号-1
      </a>
    </span>
    
  </div>


  
</footer>


  <!-- SCRIPTS -->
  
  <script  src="https://cdn.jsdelivr.net/npm/nprogress@0/nprogress.min.js" ></script>
  <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/nprogress@0/nprogress.min.css" />

  <script>
    NProgress.configure({"showSpinner":false,"trickleSpeed":100})
    NProgress.start()
    window.addEventListener('load', function() {
      NProgress.done();
    })
  </script>


<script  src="https://cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js" ></script>
<script  src="https://cdn.jsdelivr.net/npm/bootstrap@4/dist/js/bootstrap.min.js" ></script>
<script  src="/js/events.js" ></script>
<script  src="/js/plugins.js" ></script>

<!-- Plugins -->


  <script  src="/js/local-search.js" ></script>



  
    <script  src="/js/img-lazyload.js" ></script>
  



  



  
    <script  src="https://cdn.jsdelivr.net/npm/tocbot@4/dist/tocbot.min.js" ></script>
  
  
    <script  src="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3/dist/jquery.fancybox.min.js" ></script>
  
  
    <script  src="https://cdn.jsdelivr.net/npm/anchor-js@4/anchor.min.js" ></script>
  
  
    <script defer src="https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.min.js" ></script>
  






  <script  src="https://cdn.jsdelivr.net/npm/typed.js@2/lib/typed.min.js" ></script>
  <script>
    (function (window, document) {
      var typing = Fluid.plugins.typing;
      var title = document.getElementById('subtitle').title;
      
        typing(title);
      
    })(window, document);
  </script>















<!-- 主题的启动项 保持在最底部 -->
<script  src="/js/boot.js" ></script>


</body>
</html>
